package com.yochi.pictureseditor.effects.effectsimpl;

import com.yochi.pictureseditor.effects.EffectShape;
import com.yochi.pictureseditor.effects.shapes.ShapeRectangle;
import com.yochi.pictureseditor.exceptions.NullImageException;
import com.yochi.pictureseditor.images.Image;
import com.yochi.pictureseditor.images.ImageImpl;

public class EffectCutter extends EffectShape {
	
	  /////////////////
	 // CONSTRUCTOR //
	/////////////////

	public EffectCutter(Image img, boolean isForPreview) {
		super(img, new ShapeRectangle());
		getShape().setMaxX(img.getLargeur());
		getShape().setMaxY(img.getHauteur());
		getShape().setMaxParam1(img.getLargeur()); 
		getShape().setMaxParam2(img.getHauteur());
		if(isForPreview) {
			if(img.getLargeur()>=img.getHauteur()) {
				getShape().setParam1(img.getHauteur());
				getShape().setParam2(img.getHauteur());
				getShape().setX((img.getLargeur()-img.getHauteur())/2);
				getShape().setY(0);
			} else {
				getShape().setParam1(img.getLargeur());
				getShape().setParam2(img.getLargeur());
				getShape().setY((img.getHauteur()-img.getLargeur())/2);
				getShape().setX(0);
	}	}	}
	
	  ////////////
	 // PUBLIC //
	////////////
	
	@Override
	public Image apply() throws NullImageException {
		System.out.println("-> apply "+toString());
		if(getImage()==null) throw new NullImageException("load an image before applying effect");
		Image result = applyShape();
		setResult(result);
		return result;
	}
	
	  ///////////////
	 // PROTECTED //
	///////////////
	
	@Override
	protected Image applyShape() {
		int largeur = getShape().getParam1();
		int hauteur = getShape().getParam2();
		int profondeur = getImage().getProfondeur();
		Image result = new ImageImpl(profondeur, largeur, hauteur);
		for(int p=0; p<getImage().getProfondeur(); p++) {
			for(int x=0; x<getShape().getParam1(); x++) {
				for(int y=0; y<getShape().getParam2(); y++) {
					result.setPixel(p, x, y, getImage().getPixel(p, x+getShape().getX(), y+getShape().getY()));
		}	}	}
		return result;
	}

	@Override
	public String toString() {
		return "[EffectCutter]";
	}

}
